home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 2
/
Gekikoh Dennoh Club Vol. 2 (Japan).7z
/
Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin
/
tools
/
post2_g2
/
pmake
/
pmake.c
next >
Wrap
Text File
|
1997-10-13
|
19KB
|
870 lines
/*
新postmake
1997.09.19
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define VERSION "2.00"
typedef unsigned char uchar;
void main( int argc, uchar *argv[] );
void usage( void );
void get_koumoku( int num_koumoku, uchar *str_ret_ptr );
void ke_test( uchar *strptr );
int str_ncmp( uchar *gen_todo, uchar *work_todo );
void number_check( uchar *juusyo2, uchar *juusyo1 );
void put_data( uchar shikibetu, uchar *juusyo );
int get_ken_code( uchar *moto );
int shiku_hantei( uchar *shiku, int yomi_ken );
void num_put( void );
void del_last_char( uchar workstr[128] );
void shiku_bunri( int yomi_ken );
int gun_bunri( int yomi_ken );
void syori( void );
/*
グローバル変数宣言
*/
FILE *ai,*bi; /* ファイル用 */
int ctr, /* カウンタ(オフセット算出用) */
tousyo_sw = 0, /* 島しょ処理スイッチ */
old_kubun = 0, /* 直前に処理したデータの市町村区分 */
shiku_kubun = 0; /* 市町村区分 */
uchar ken, /* 県コード */
moto_str[256], /* 元ファイルからの入力行保持用文字列 */
old_kugun[64],
gun_yomi[64],
tyouson_yomi[64],
gen_todo[9], /* 現在処理中の都道府県名 */
gen_shiku[23], /* 現在処理中の市区郡町村名 */
gen_shi[32],
gen_gun[32];
uchar work_todo[9],
work_shiku[64],
work_shigun[64],
work_azamei[1024],
work_azamei2[128],
work_yomi[128];
uchar seirei_toshi[12][2][10] = { /* 政令指定都市 */
"札幌市", "サツポロシ",
"仙台市", "センダイシ",
"千葉市", "チバシ",
"横浜市", "ヨコハマシ",
"川崎市", "カワサキシ",
"名古屋市", "ナゴヤシ",
"京都市", "キヨウトシ",
"大阪市", "オオサカシ",
"神戸市", "コウベシ",
"広島市", "ヒロシマシ",
"北九州市", "キタキユウシユウシ",
"福岡市", "フクオカシ"
};
int seirei_toshisuu = 12;
uchar tousyo[9][2][11] = { /* 島しょ */
"大島", "オオシマ",
"利島", "トシマ",
"新島", "ニイジマ",
"神津島", "コウヅシマ",
"三宅島", "ミヤケジマ",
"御蔵島", "ミクラジマ",
"八丈島", "ハチジヨウジマ",
"青ケ島", "アオガシマ",
"小笠原諸島", "オガサワラシヨトウ"
};
int tousuu = 9;
/*
メイン
*/
void
main( int argc, uchar *argv[] )
{
setvbuf( stdout, NULL, _IONBF, 0 ); /* 標準出力のバッファ禁止 */
/* こっちの方が表示がかっこ良いので */
tousyo_sw = 0;
/* ai : 元ファイル all.csv */
if( (ai = fopen( "all.csv", "rt")) == NULL) {
puts("変換元ファイル all.csv がオープンできません。");
usage();
exit( 1 );
}
/* bi : 諸元ファイル post.dat */
if( (bi = fopen( "post.dat", "wt")) == NULL) {
puts("諸元ファイル post.dat がオープンできません。");
usage();
exit( 1 );
}
ken = 0; /* 県コードはとりあえず0 */
ctr = 0; /* カウンタリセット */
gen_todo[ 0 ] = '\0'; /* 現在処理中の都道府県名 */
gen_shiku[ 0 ] = '\0'; /* 現在処理中の市区町村名 */
/*
本処理
*/
do {
if( fgets( moto_str, 256, ai ) == NULL ) {
if( feof(ai) ) {
break;
} else {
printf("ファイル読み込みエラー\n");
usage();
exit(1);
}
}
syori(); /* 中身を処理 */
} while( 1 );
puts("");
fclose( ai );
fclose( bi );
return;
}
/*
使用法表示
*/
void
usage()
{
printf("郵便番号ファイル変換プログラム postmake Ver %s",VERSION);
printf(" Created by 中村隆生(満開製作所) 1993.\n\n");
printf("使用法:postmake <元ファイル名1> <元ファイル名2>\n");
printf(" カレントディレクトリに郵便番号ファイル post.dat と");
printf("オフセット post.ofs を作成します。\n");
return;
}
/*
項目取得
要求仕様:
moto_str のn番目の項目を取得する。
得た文字列はstr_ret_ptrに格納する。
項目は必ずダブルクォーテーションで囲まれているものとする。
項目スキップの目印にはカンマと " を使用しているが、シフトJISの
文字にはカンマと " は使用していない。
*/
void
get_koumoku( int num_koumoku, uchar *str_ret_ptr )
{
int i1, /* ループ汎用 */
len;
uchar *moto_ptr, /* ワークのポインタ */
*check_ptr; /* チェック用のポインタ */
check_ptr = str_ret_ptr; /* ポインタの待避 */
moto_ptr = moto_str; /* ポインタのセット */
/*
項目の頭出し
*/
for( i1=1; i1<=num_koumoku-1; ++i1 ) {
while( (*moto_ptr++) != ',' ) /* 次の「,」まで読みとばし */
;
}
moto_ptr++; /* その次の「"」も読みとばし */
for(;;) { /* 次の「"」まで文字列を複写 */
if( *moto_ptr != '\"' ) { /* 「"」は複写しない */
*str_ret_ptr++ = *moto_ptr++;
} else {
break;
}
}
*str_ret_ptr = '\0'; /* 終端記号の付加 */
if( num_koumoku == 4 || num_koumoku == 5 || num_koumoku == 6 ) {
len = strlen( check_ptr );
for( i1=0; i1<=len-1; i1++ ) {
if( *check_ptr == 0xaf ) { /* ッ */
*check_ptr = 0xc2; /* ツ */
} else if( *check_ptr == 0xac ) { /* ャ */
*check_ptr = 0xd4; /* ヤ */
} else if( *check_ptr == 0xad ) { /* ュ */
*check_ptr = 0xd5; /* ユ */
} else if( *check_ptr == 0xae ) { /* ョ */
*check_ptr = 0xd6; /* ヨ */
}
check_ptr++;
}
} else {
ke_test( check_ptr ); /* ヵとヶのテスト */
}
return;
}
/*
ヵとヶのテスト
ヵかヶを見付けたら、それぞれカとケに変換する
*/
void
ke_test( uchar *strptr )
{
int i1 = 0, /* ループ汎用 */
len = 0; /* 長さ */
len = strlen( strptr );
for( i1=0; i1<=len-1; i1+=2 ) { /* 対象は全部全角なので2個とばし */
if( *strptr == 0x83 ) { /* 83 …… ヵとヶの1バイト目 */
strptr++; /* 1個進める */
if( *strptr == 0x95 ) { /* ヵ */
*strptr = 0x4a; /* カ */
} else if( *strptr == 0x96 ) { /* ヶ */
*strptr = 0x50; /* ケ */
}
strptr++; /* 1個進める */
} else {
strptr += 2; /* 2個進める */
}
}
return;
}
/*
高速な(うそ)文字列照合ルーチン
*/
int
str_ncmp( uchar *gen_todo, uchar *work_todo )
{
if( *gen_todo != *work_todo ) { /* まず先頭1文字を比較してしまう */
return 1;
}
return ( strcmp( gen_todo, work_todo ) );
}
/*
数字チェック
全角数字を半角数字にして返す
*/
void
number_check( uchar *juusyo2, uchar *juusyo1 )
{
int len_str = 0, /* 文字列長さ */
i1 = 0; /* ループ汎用 */
len_str = strlen( juusyo1 );
for( i1=0; i1<=len_str-1; i1++ ) {
if( isdigit( (int)*juusyo1 ) ) { /* すでに半角数字=郵便番号 */
*juusyo2++ = *juusyo1++; /* 1バイトだけ */
continue;
}
// if( *juusyo1 == 0x82 ) { /* 全角数字の1バイト目? */
//
// if( (*(juusyo1+1) <= 0x59) && (*(juusyo1+1) >= 0x4f) ) {
// ++juusyo1; /* 1個進める */
// *juusyo2++ = (*juusyo1++) - 0x1f; /* 半角数字化 */
// } else {
// *juusyo2++ = *juusyo1++; /* たぶん全角 */
// *juusyo2++ = *juusyo1++;
// }
// } else {
*juusyo2++ = *juusyo1++; /* 全角だといいな */
*juusyo2++ = *juusyo1++;
// }
++i1; /* ひえ~ */
}
*juusyo2 = '\0'; /* 終端文字をセット */
return;
}
/*
住所データ出力
半角英字1文字と住所を受け取る。
英字1文字と住所をそのまま ci に書き出し、
グローバル変数 ctr に1+(住所の文字数)を足し込む。
*/
void
put_data( uchar shikibetu, uchar *juusyo )
{
uchar juusyo2[1024], /* 受け皿 */
*j2_ptr;
j2_ptr = juusyo2; /* ポインタセット */
number_check( j2_ptr, juusyo ); /* 数字チェック */
fputc( shikibetu, bi );
fputs( j2_ptr, bi );
ctr += (1 + strlen( j2_ptr ) );
return;
}
/*
もらった行から県コードを抽出して返す
*/
int
get_ken_code( uchar *moto )
{
uchar ch1, ch2;
ch1 = moto[0];
ch2 = moto[1];
return ((ch1 - 0x30) * 10) + (ch2 - 0x30);
}
/*
市区郡判定
末尾の1字を見て、市区郡の判定を行い、戻り値とする。
1=市 2=市内区 3=特別区 4=郡+町 5=郡+村
*/
int
shiku_hantei( uchar *shiku, int yomi_ken )
{
int kubun = 0, /* 市区区分 */
len_shiku; /* 長さ格納用 */
uchar moji_work[3]; /* 全角2文字ワーク */
len_shiku = strlen( shiku ); /* まず長さを得る */
moji_work[0] = shiku[len_shiku-2]; /* 末尾の1文字(ただし全角)を得る */
moji_work[1] = shiku[len_shiku-1];
moji_work[2] = '\0';
/* 原始的な事をやってますが、単なる */
/* 手抜きですので気にしないでいいです */
if( str_ncmp( moji_work, "市" ) == 0 ) {
kubun = 1; /* 単なる市 */
} else if( str_ncmp( moji_work, "区" ) == 0 ) {
if( yomi_ken == 13 ) { /* 東京都内である */
kubun = 3; /* 東京都特別区 */
} else {
kubun = 2; /* 政令指定都市内の区 */
}
} else if( str_ncmp( moji_work, "町" ) == 0 ) {
kubun = 4; /* 町 */
} else if( str_ncmp( moji_work, "村" ) == 0 ) {
kubun = 5; /* 村 */
} else {
printf("FAIL : 末尾が市区町村でない(|%s|)\n",moji_work);
exit(1);
}
return( kubun );
}
/*
郵便番号の獲得と書出
*/
void
num_put()
{
uchar bangou[8], /* 郵便番号用ワーク */
kban[8]; /* 旧番号 */
get_koumoku( 3, bangou ); /* 郵便番号を得る */
get_koumoku( 2, kban );
/*
旧番号と新番号の比較チェック:結構違うことが分かったのでコメントアウト
k_len = strlen( kban );
for( i1=0; i1<=k_len-1; i1++ ) {
if( bangou[i1] != kban[i1] ) {
printf("反例発見 |%s| != |%s|\n",bangou,kban);
break;
}
}
*/
put_data( '*', bangou ); /* 郵便番号出力 */
put_data( '\'', kban ); /* 旧番号出力 */
return;
}
/*
後の全角1文字を削除する
*/
void
del_last_char( uchar workstr[128] )
{
int len_str = 0;
len_str = strlen( workstr );
workstr[ len_str - 2 ] = '\0';
return;
}
/*
市区分離
政令指定都市のみ:市名から区名を分離する
*/
void
shiku_bunri( int yomi_ken )
{
int nagasa=0,
nagasa2=0,
cnt=0,
toshi=0,
i1;
uchar basyo[64];
nagasa = strlen( work_shiku );
/* 「市」の字を探す 8e73 */
/* 1文字目と最後の文字は探さない */
for( i1=2; i1<=nagasa-4; i1+=2 ) {
if( work_shiku[i1] == 0x8e && work_shiku[i1+1] == 0x73 ) {
cnt++;
basyo[cnt] = i1;
}
}
switch( cnt ) {
/* 「市」の文字がひとつもない=おかしい */
case 0:
printf("市がない。おかしい|%s|\n",work_shiku);
break;
/* 「市」の文字がひとつ=普通 */
case 1:
/* 市名を分離 */
for( i1=0; i1<=basyo[1]-1; i1++ ) {
work_shigun[i1] = work_shiku[i1];
}
work_shigun[basyo[1]] = '\0';
/* 区名を分離 */
for( i1=basyo[1]+2; i1<=nagasa-1; i1++ ) {
work_shiku[i1-basyo[1]-2] = work_shiku[i1];
}
work_shiku[nagasa-basyo[1]-2] = '\0';
/* 市名を特定 */
toshi = -1;
for( i1=0; i1<=seirei_toshisuu-1; i1++ ) {
if( strstr( work_yomi, seirei_toshi[i1][1] ) != NULL ) {
toshi = i1;
break;
}
}
if( toshi == -1 ) {
printf("市名が現れなかった。おかしい|%s|\n",work_yomi);
return;
}
/* 市名を分離 */
strcpy( gun_yomi, seirei_toshi[toshi][1] );
/* 区名を分離 */
nagasa = strlen( work_yomi );
nagasa2 = strlen( seirei_toshi[toshi][1] );
for( i1=nagasa2; i1<=nagasa-1; i1++ ) {
tyouson_yomi[i1-nagasa2] = work_yomi[i1];
}
tyouson_yomi[nagasa - nagasa2] = '\0';
break;
case 2:
printf("市がふたつ|%s|\n",gen_shiku);
break;
/* その他=おかしい */
default:
printf("市が3つ以上ある。|%s|\n",gen_shiku);
break;
}
return;
}
/*
郡分離
町村名から郡名を分離する
*/
int
gun_bunri( int yomi_ken )
{
int nagasa=0,
nagasa2 = 0,
ret = 0,
cnt=0,
shima = 0,
i1;
uchar basyo[64];
nagasa = strlen( work_shiku );
/* 「郡」の字を探す 8c53 */
/* 1文字目と最後の文字は探さない */
for( i1=2; i1<=nagasa-4; i1+=2 ) {
if( work_shiku[i1] == 0x8c && work_shiku[i1+1] == 0x53 ) {
cnt++;
basyo[cnt] = i1;
}
}
switch( cnt ) {
/* 「郡」の文字がひとつもない=東京都島しょの特例 */
case 0:
/* 「島」の字を探す */
for( i1=2; i1<=nagasa-4; i1+=2 ) {
if( work_shiku[i1] == 0x93 && work_shiku[i1+1] == 0x87 ) {
cnt++;
basyo[cnt] = i1;
}
}
/* 町村名を分離 */
for( i1=basyo[1]+2; i1<=nagasa-1; i1++ ) {
work_shiku[i1-basyo[1]-2] = work_shiku[i1];
}
work_shiku[nagasa-basyo[1]-2] = '\0';
/* 島名を特定 */
shima = -1;
for( i1=0; i1<=tousuu-1; i1++ ) {
if( strstr( work_yomi, tousyo[i1][1] ) != NULL ) {
shima = i1;
break;
}
}
if( shima == -1 ) {
printf("島名が現れなかった。おかしい|%s|\n",work_yomi);
return 0;
}
/* 町村名を分離 */
nagasa = strlen( work_yomi );
nagasa2 = strlen( tousyo[shima][1] );
for( i1=nagasa2; i1<=nagasa-1; i1++ ) {
tyouson_yomi[i1-nagasa2] = work_yomi[i1];
}
tyouson_yomi[nagasa - nagasa2] = '\0';
ret = 1;
if( tousyo_sw == 0 ) {
strcpy( work_shigun, "島しょ" );
strcpy( gun_yomi, "トウシヨ" );
tousyo_sw = 1;
}
break;
/* 「郡」の文字がひとつ=普通、ふたつ=町名の中に「郡」の字が使われている */
case 1:
case 2:
/* 郡名を分離 */
for( i1=0; i1<=basyo[1]-1; i1++ ) {
work_shigun[i1] = work_shiku[i1];
}
work_shigun[basyo[1]] = '\0';
/* 町村名を分離 */
for( i1=basyo[1]+2; i1<=nagasa-1; i1++ ) {
work_shiku[i1-basyo[1]-2] = work_shiku[i1];
}
work_shiku[nagasa-basyo[1]-2] = '\0';
/* 郡の読み「グン」の位置を特定 */
cnt = 0;
nagasa = strlen( work_yomi );
for( i1=2; i1<=nagasa; i1++ ) {
if( work_yomi[i1 ]==0xb8 &&
work_yomi[i1+1]==0xde &&
work_yomi[i1+2]==0xdd ) {
cnt++;
basyo[1] = i1;
break;
}
}
/* 郡名の読みを分離 */
for( i1=0; i1<=basyo[1]+2; i1++ ) {
gun_yomi[i1] = work_yomi[i1];
}
gun_yomi[basyo[1]+3] = '\0';
/* 町村名の読みを分離 */
for( i1=basyo[1]+3; i1<=nagasa-1; i1++ ) {
tyouson_yomi[i1-basyo[1]-3] = work_yomi[i1];
}
tyouson_yomi[nagasa-basyo[1]-3] = '\0';
break;
/* その他=おかしい */
default:
printf("おかしい。「郡」が3つ以上|%s|",work_shiku);
break;
}
return ret;
}
/*
本処理
*/
void
syori()
{
int i1 = 0,
tou = 0,
touhenka = 0,
nagasa = 0,
hiraki = 0, /* 開き括弧数 */
toji = 0, /* 閉じ括弧数 */
kakko_check = 0,
yomi_ken=0;
uchar
shityou_henka = 0;
/*
変数の初期化
*/
yomi_ken = get_ken_code( moto_str ); /* いま読んだ行の県コードを得る */
/*
第7項 都道府県名の処理
*/
get_koumoku( 7, work_todo ); /* 都道府県名を得る */
get_koumoku( 4, work_yomi ); /* その読みを得る */
if( str_ncmp( gen_todo, work_todo ) != 0 ) { /* 新しい都道府県名である */
put_data( ' ', work_todo ); /* ファイルに書き出し */
put_data( '+', work_yomi ); /* 読みも */
strcpy( gen_todo, work_todo ); /* 都道府県名を更新 */
gen_shiku[0] = '\0'; /* 市区郡町村名の初期化 */
printf("\n\n%s\n",gen_todo);
}
/*
第8項 市区郡町村名の処理
*/
get_koumoku( 8, work_shiku );
get_koumoku( 5, work_yomi );
old_kubun = shiku_kubun;
shiku_kubun = shiku_hantei( work_shiku, yomi_ken ); /* 市か区か郡か判定する */
if( str_ncmp( gen_shiku, work_shiku ) != 0 ) { /* 新しい市区郡町村名である */
shityou_henka = 1; /* 新しいのでフラグ立てる */
strcpy( gen_shiku, work_shiku ); /* 市区郡町村名を更新 */
del_last_char( work_shiku ); /* 末尾の全角1文字を削除 */
switch( shiku_kubun ) {
/* 市 */
case 1:
if( old_kubun == 2 || old_kubun == 3 ) { /* 直前が区なら */
printf("\n"); /* 改行する */
}
put_data( '!', work_shiku ); /* ファイル書き出し */
put_data( '+', work_yomi );
printf("%s市 ", work_shiku );
break;
/* 政令指定都市内の区 */
case 2:
strcpy( old_kugun, gen_gun ); /* 直前の市名を退避 */
shiku_bunri( yomi_ken );
if( str_ncmp( work_shigun, old_kugun ) != 0 ) { /* 市名が違うなら */
if( old_kubun == 2 ) { /* 直前が市内区なら */
printf("\n"); /* 改行する */
}
strcpy( gen_gun, work_shigun ); /* 処理中の市名を更新 */
put_data( '!', gen_gun );
put_data( '+', gun_yomi );
printf("%s市 : ", gen_gun );
}
put_data( '$', work_shiku );
put_data( '+', tyouson_yomi );
printf("%s区 ", work_shiku );
break;
/* 特別区 */
case 3:
put_data( '\"', work_shiku ); /* ファイル書き出し */
put_data( '+', work_yomi );
printf("%s区 ", work_shiku );
break;
/* 町 */
case 4:
if( old_kubun != 4 && old_kubun != 5 ) {
gen_gun[0] = '\0';
}
strcpy( old_kugun, gen_gun ); /* 直前の郡名を退避 */
tou = gun_bunri( yomi_ken );
/* 郡名が違うなら(島しょを除く) */
// if( tou==0 && str_ncmp( work_shigun, old_kugun ) != 0 ) {
if( str_ncmp( work_shigun, old_kugun ) != 0 ) {
strcpy( gen_gun, work_shigun ); /* 処理中郡名を更新 */
put_data( '#', gen_gun );
put_data( '+', gun_yomi );
printf("\n%s郡 : ",gen_gun);
}
// if( touhenka == 0 && tou == 1 ) { /* 島しょに入った */
// puts("");
// touhenka = 1;
// }
put_data( ':', work_shiku ); /* ファイル書き出し */
put_data( '+', tyouson_yomi );
printf("%s町 ", work_shiku );
break;
/* 村 */
case 5:
if( old_kubun != 4 && old_kubun != 5 ) {
gen_gun[0] = '\0';
}
strcpy( old_kugun, gen_gun ); /* 直前の郡名を退避 */
tou = gun_bunri( yomi_ken );
/* 郡名が違うなら(島しょを除く) */
// if( tou==0 && str_ncmp( work_shigun, old_kugun ) != 0 ) {
if( str_ncmp( work_shigun, old_kugun ) != 0 ) {
strcpy( gen_gun, work_shigun ); /* 処理中郡名を更新 */
put_data( '#', gen_gun );
put_data( '+', gun_yomi );
printf("\n%s郡 : ", gen_gun);
}
// if( touhenka == 0 && tou == 1 ) { /* 島しょに入った */
// puts("");
// touhenka = 1;
// }
put_data( ';', work_shiku ); /* ファイル書き出し */
put_data( '+', tyouson_yomi );
printf("%s村 ", work_shiku );
break;
}
}
if( shityou_henka ) { /* 変化したばかりである */
get_koumoku( 9, work_azamei ); /* 字名を得る */
if( strstr( work_azamei, "以下に掲載が" ) == NULL ) {
/* 頭の行なのに「以下に掲載がない場合」がない */
if( strstr( work_azamei, "一円" ) == NULL ) { /* 一円でもない */
/* 一円という地名もあるが、その時は shityou_henka は
立っていないはずであるので */
printf("おかしい。頭の行なのに「以下に掲載」がない|%s|%s|\n",
work_shiku,work_azamei);
}
}
num_put(); /* 番号を書く=該当なし時番号 */
shityou_henka = 0; /* フラグ寝せる */
} else {
/* 字名処理 */
get_koumoku( 9, work_azamei );
get_koumoku( 6, work_yomi );
/* 括弧存在チェック */
if( strstr( work_azamei, "(" ) != NULL ) { /* 括弧があれば */
kakko_check = 0;
do {
/* 括弧数を調べる 開き括弧=0x8169、閉じ括弧=0x816a */
nagasa = strlen( work_azamei );
hiraki = 0;
toji = 0;
for( i1=0; i1<=nagasa-2; i1++ ) { /* 2文字おき */
if( work_azamei[i1 ] == 0x81 &&
work_azamei[i1+1] == 0x69 ) { /* ( */
hiraki++;
} else
if( work_azamei[i1 ] == 0x81 &&
work_azamei[i1+1] == 0x6a ) { /* ) */
toji++;
}
}
/* 均等が取れていない=次の行に続いている */
if( hiraki - toji != 0 ) {
/* もう1行ゲットする=これは安全に取れるはず */
fgets( moto_str, 256, ai );
get_koumoku( 9, work_azamei2 ); /* 項目ゲット */
if( strlen( work_azamei ) +
strlen(work_azamei2) >= 2048 ) {
printf("文字列が長すぎる:|%s|%s|\n",
work_azamei,work_azamei2);
}
/* コンカチ */
strcat( work_azamei, work_azamei2 );
} else {
kakko_check = 1;
}
} while( kakko_check == 0 );
}
put_data( '%', work_azamei );
put_data( '+', work_yomi );
num_put();
}
return;
}